/**
 * 对axios请求方法进行封装
 * 1.get() 普通get方法
 * 2.reget() 参数格式转化的get方法
 * 3.post() 普通post方法
 * 4.repost() 参数格式转化的post方法
 * 5.upload() 文件上传的post方法
 * 6.remove() 普通delete方法
 * 7.reremove() 参数格式转化的delete方法
 * 8.put() 普通put方法
 * 9.reput() 参数格式转化的put方法
 * 10.uploadPut() 文件上传的put方法
 */
import axios from 'axios'
import qs from 'qs'

/**
 * 封装get方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function get(url, data) {
  return new Promise((resolve, reject) => {
    axios.get(url, { params: data }).then(response => {
      resolve(response)
    }).catch(error => {
      reject(error)
    })
  })
}

/**
 * 封装参数格式转化的get方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function reget(url, data) {
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: data,
      paramsSerializer: params => { return qs.stringify(params, { arrayFormat: 'brackets' }) }
    }).then(response => {
      resolve(response)
    }).catch(error => {
      reject(error)
    })
  })
}

/**
 * 封装普通post方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function post(url, data) {
  return new Promise((resolve, reject) => {
    axios.post(url, data, {
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, // 将传给后台的数据转换成FormData
      transformRequest: [function(data) { // 对传递的数据进行格式转换，以便传递给后台
        data = qs.stringify(data)
        return data
      }]
    }).then(response => {
      resolve(response)
    }).catch(error => {
      reject(error)
    })
  })
}

/**
 * 封装参数格式转化的post方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function repost(url, data) {
  return new Promise((resolve, reject) => {
    axios.post(url, qs.stringify(data, { arrayFormat: 'brackets' })).then(response => {
      resolve(response)
    }).catch(error => {
      reject(error)
    })
  })
}

/**
 * 封装上传文件的post方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function upload(url, data) {
  return new Promise((resolve, reject) => {
    axios.post(url, data, {
      headers: { 'Content-Type': 'multipart/form-data' }
    }).then(response => {
      resolve(response)
    }).catch(error => {
      reject(error)
    })
  })
}

/**
 * 封装delete方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function remove(url, data) {
  return new Promise((resolve, reject) => {
    axios.delete(url, { params: data }).then(response => {
      resolve(response)
    }).catch(error => {
      reject(error)
    })
  })
}

/**
 * 封装参数格式转化delete方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function reremove(url, data) {
  return new Promise((resolve, reject) => {
    axios.delete(url, {
      params: data,
      paramsSerializer: params => { return qs.stringify(params, { arrayFormat: 'brackets' }) }
    }).then(response => {
      resolve(response)
    }).catch(error => {
      reject(error)
    })
  })
}

/**
 * 封装put方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function put(url, data) {
  return new Promise((resolve, reject) => {
    axios.put(url, data, {
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, // 将传给后台的数据转换成FormData
      transformRequest: [function(data) { // 对传递的数据进行格式转换，以便传递给后台
        data = qs.stringify(data)
        return data
      }]
    }).then(response => {
      resolve(response)
    }).catch(error => {
      reject(error)
    })
  })
}

/**
 * 封装参数格式转化的put方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function reput(url, data) {
  return new Promise((resolve, reject) => {
    axios.put(url, qs.stringify(data, { arrayFormat: 'brackets' })).then(response => {
      resolve(response)
    }).catch(error => {
      reject(error)
    })
  })
}

/**
 * 封装文件上传的put方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function uploadPut(url, data) {
  return new Promise((resolve, reject) => {
    axios.put(url, data, {
      headers: { 'Content-Type': 'multipart/form-data' }
    }).then(response => {
      resolve(response)
    }).catch(error => {
      reject(error)
    })
  })
}
